function queryStringify(obj) {
      let str = ''
      for (let k in obj) {
          str += `${k}=${obj[k]}&`
      }
      return str.slice(0, -1)
  }
  function ajax(options) {
      console.log(options);
      if (Object.prototype.toString.call(options) !== '[object Object]') {
          throw new Error('这里需要传入一个对象数据类型')
      }
      const { url, method, async, data, headers, dataType, success, error } = options
      if (!url || typeof url !== 'string') {
          throw new Error('填写的url不正确，请填写正确的url')
      }
      if (!(method === undefined || /^(get|post)$/i.test(method))) {
          throw new Error('请出入正确的请求方式，GET或者POST')
      }

      if (!(async === undefined || typeof async === 'boolean')) {
          throw new Error('async 填写的值不正确，请正确填写')
      }
      if (!(data === undefined || typeof data === 'string' || Object.prototype.toString.call(data) === '[object Object]')) {
          throw new Error('data参数不正确，请传入真确的data参数')
      }
      if (!(headers === undefined || Object.prototype.toString.call(headers) === '[object Object]')) {
          throw new Error('heaters 必须是一个对象类型的数据，请重新填写')
      }
  
      if (!(dataType === undefined || /^(string|json)$/i.test(dataType))) {
          throw new Error('传入的响应体格式不对，请传入正确的响应体解析格式')
      }
  
      if (!(success === undefined || typeof success === 'function')) {
          throw new Error('success 填写不成功，请填写一个函数')
      }
  
      if (!(error === undefined || typeof error === 'function')) {
          throw new Error('error 填写不成功，请填写一个函数')
      }
      var _default = {
              url: url,
              method: method || 'GET',
              async: typeof async === 'boolean' ? async : true,
              data: data || '',
              headers: { 'content-type': 'application/x-www-form-urlencoded', ...headers },
              dataType: dataType || 'string',
              success: success || function() {},
              error: error || function() {}
          }
      if (typeof data === 'object') {
          _default.data = queryStringify(data)
      }
      if (/^get$/i.test(_default.method) && data) {
          //把传入的查询字符串数据拼接到url后面
          _default.url = '?' + _default.data
      }
      console.log(_default);
  
      const xhr = new XMLHttpRequest()
      xhr.open(_default.method, _default.url, _default.async)
      xhr.onload = function() {
              let result = xhr.responseText
              if (_default.dataType === 'json') {
                  try {
                      result = JSON.parse(xhr.responseText)
                      _default.success(result)
                  } catch (error) {
                      _default.error('解析失败，因为后端返回的不是一个json格式的字符串')
                  }
              } else {

                  _default.success(result)
              }
          }
      for (let k in _default.headers) {
  
          xhr.setRequestHeader(k, _default.headers[k])
      }
      if (/^get$/i.test(_default.method)) {
          xhr.send()
      } else {
          xhr.send(_default.data)
      }
  }
  let formBox = document.querySelector('form')
  let usernameBox = document.querySelector('.username')
  let passwordBox = document.querySelector('.password')
  let rpasswordBox = document.querySelector('.rpassword')
  let nicknameBox = document.querySelector('.nickname')
  let errBox = document.querySelector('.error')
  // 给form表单添加submit事件
  formBox.addEventListener('submit', (e) => {
      // 处理事件对象兼容
      e = e || window.event
          // 处理表单自动提交的默认行为
      try {
          e.preventDefault()
      } catch (error) {
          e.returnValue = false
      }
      // 根据接口文档我们知道需要把用户的信息都传过去
      // 我们封装的Ajax可以传递一个对象
      // 我们可以直接把用户的信息添加到一个对象中
      // 对象中的键名就是我们要穿传递的参数名称
      const Info = {
          username: usernameBox.value,
          password: passwordBox.value,
          rpassword: rpasswordBox.value,
          nickname: nicknameBox.value
      }
      // 非空验证
      if (!Info.username || !Info.password || !Info.rpassword || !Info.nickname) return alert('信息填写不正确，请重新填写')
      // 正则验证
      // 重复密码验证
      if (Info.password !== Info.rpassword) return alert('密码填写不正确，请重新填写')
      // 发送Ajax请求
      ajax({
          url: 'http://localhost:8888/users/register',
          method: 'POST',
          data: Info,
          dataType: 'json',
          success: function(res) {
              // console.log(res);
              // 判断一下是否注册成功 我们看到注册成功的时候code是1
              if (res.code !== 1) return errBox.style.display = 'block'
              // 代码能执行到这里说明注册成功了
              window.alert('恭喜你注册成功，跳转到登录页')
              // 跳转到登录页
              window.location.href = 'http://localhost:9000/login.html'
          }
      })
  })